#ifndef __RAMDISK_H
#define __RAMDISK_H

#ifdef __cplusplus
extern "C"
{
#endif

/*
ramdiskCreate initialize a dynamic RAM-disk.
return: Handle for ramdiskMount
*/
void* ramdiskCreate();

/**************************************************
 * ramdiskDelete
 *
 * destroy all datas
 * if the ramdisk is allready mounted forces ramdiskUnmount
 * IN: a Handle was created witch ramdiskCreate();
 **************************************************/
void ramdiskDelete(void* Handle);

/**************************************************
 * ramdiskMount
 *
 * mounts a ramdisk
 * IN: mountpoint e.g. "RAM" or "MEM:"
 *     handle     is a Handle was created ramdiskCreate()
 *				  or NULL for auto-create
 * OUT: 0 = Error / !0 = OK 
 **************************************************/
int ramdiskMount(const char *mountpoint, void *handle);



/**************************************************
 * ramdiskUnmount
 *
 * unmounts a ramdisk
 * IN: mountpoint e.g "RAM" or "MEM:"
 **************************************************/
void ramdiskUnmount(const char *mountpoint);




/*
NOTE:
if the ramdisk not explizit created with ramdiskCreate (e.g ramdiskMount("RAMDISK:", NULL))
the ramdisk is implizit created. When unmount this "auto-created" ramdisk the ramdisk automitic deleted

but if the ramdisk explizit created (with ramdiskCreate), 
then we can remount the filesystem without lost all datas.

Example1:
=========
void *ram = ramdiskCreate();		// create ramdisk
ramdiskMount("RAM", ram);			// mount the ramdisk
...
fopen("RAM:/file", ...);
...
ramdiskMount("MEM", ram);			// remount as MEM: (without lost of data)
...
fopen("RAM:/file", ...);
...
ramdiskUnmount("MEM");				// unmount
...
ramdiskMount("RAM", ram);			// remount as RAM: (without lost of data)
...
ramdiskDelete(ram);					// unmount and delete

Example2:
=========
ramdiskMount("RAM", NULL);			// create and mount the ramdisk
...
fopen("RAM:/file", ...);
...
ramdiskUnmount("RAM");					// unmount and delete
*/

#ifdef __cplusplus
}
#endif

#endif /*__RAMDISK_H*/
